/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package test.net.sourceforge.pmd.rules;
import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.Report;
import net.sourceforge.pmd.RuleViolation;
import net.sourceforge.pmd.rules.CyclomaticComplexityRule;
import test.net.sourceforge.pmd.testframework.RuleTst;
import java.util.Iterator;
public class CyclomaticComplexityRuleTest extends RuleTst {
private CyclomaticComplexityRule rule = new CyclomaticComplexityRule();
public void setUp() {
rule.setMessage("The {0} ''{1}'' has a Cyclomatic Complexity of {2}.");
}
public void testOneMethod() throws Throwable {
rule.addProperty("reportLevel", "1");
Report report = new Report();
runTestFromString(TEST1, rule, report);
Iterator i = report.iterator();
RuleViolation rv = (RuleViolation) i.next();
assertTrue(rv.getDescription().indexOf("Highest = 1") != -1);
}
public void testNastyComplicatedMethod() throws Throwable {
rule.addProperty("reportLevel", "10");
Report report = new Report();
runTestFromString(TEST2, rule, report);
Iterator i = report.iterator();
RuleViolation rv = (RuleViolation) i.next();
assertTrue(rv.getDescription().indexOf("Highest = 12") != -1);
}
public void testConstructor() throws Throwable {
rule.addProperty("reportLevel", "1");
Report report = new Report();
runTestFromString(TEST3, rule, report);
Iterator i = report.iterator();
RuleViolation rv = (RuleViolation) i.next();
assertTrue(rv.getDescription().indexOf("Highest = 1") != -1);
}
public void testLessComplicatedThanReportLevel() throws Throwable {
rule.addProperty("reportLevel", "10");
Report report = new Report();
runTestFromString(TEST1, rule, report);
assertEquals(0, report.size());
}
private static final String TEST1 =
"public class CyclomaticComplexity1 {" + PMD.EOL +
" public void foo() {}" + PMD.EOL +
"}";
private static final String TEST2 =
"public class CyclomaticComplexity2 {" + PMD.EOL +
" public void example() {" + PMD.EOL +
" int x = 0;" + PMD.EOL +
" int a = 0;" + PMD.EOL +
" int b = 0;" + PMD.EOL +
" int c = 0;" + PMD.EOL +
" int d = 0;" + PMD.EOL +
" int a1 = 0;" + PMD.EOL +
" int a2 = 0;" + PMD.EOL +
" int b1 = 0;" + PMD.EOL +
" int b2 = 0;" + PMD.EOL +
" int z = 0;" + PMD.EOL +
" int h = 0;" + PMD.EOL +
" int e = 0;" + PMD.EOL +
" int f = 0;" + PMD.EOL +
"" + PMD.EOL +
" if (a == b) {" + PMD.EOL +
" if (a1 == b1) {" + PMD.EOL +
" x=2;" + PMD.EOL +
" } else if (a2 == b2) {" + PMD.EOL +
" x=2;" + PMD.EOL +
" }" + PMD.EOL +
" else" + PMD.EOL +
" {" + PMD.EOL +
" x=2;" + PMD.EOL +
" }" + PMD.EOL +
" }" + PMD.EOL +
" else if (c == d)" + PMD.EOL +
" {" + PMD.EOL +
" while (c == d)" + PMD.EOL +
" {" + PMD.EOL +
" x=2;" + PMD.EOL +
" }" + PMD.EOL +
" }" + PMD.EOL +
" else if (e == f)" + PMD.EOL +
" {" + PMD.EOL +
" for (int n = 0; n < h; n++)" + PMD.EOL +
" {" + PMD.EOL +
" x=2;" + PMD.EOL +
" }" + PMD.EOL +
" }" + PMD.EOL +
" else" + PMD.EOL +
" {" + PMD.EOL +
" switch (z)" + PMD.EOL +
" {" + PMD.EOL +
" case 1:" + PMD.EOL +
" x=2;" + PMD.EOL +
" break;" + PMD.EOL +
"" + PMD.EOL +
" case 2:" + PMD.EOL +
" x=2;" + PMD.EOL +
" break;" + PMD.EOL +
"" + PMD.EOL +
" case 3:" + PMD.EOL +
" x=2;" + PMD.EOL +
" break;" + PMD.EOL +
"" + PMD.EOL +
" default:" + PMD.EOL +
" x=2;" + PMD.EOL +
" break;" + PMD.EOL +
" }" + PMD.EOL +
" }" + PMD.EOL +
" }" + PMD.EOL +
"}";
private static final String TEST3 =
"public class CyclomaticComplexity3 {" + PMD.EOL +
" public CyclomaticComplexity3() {}" + PMD.EOL +
"}";
}